﻿<#
    The Monks of the PowerShell order have become angry, and began to complain
    that the best chores are being given to the favored Monks. In order to prevent the dishonour of
    the angry Monks, we must fix this.

    Write a PowerShell function that takes input of:
        [int[]]$Data,
        [int]$Number
    That takes in a list of less than 100 integers and a number n, and returns that same list but
    with all of the numbers that occur more than n times removed entirely. The returned list should
    retain the same ordering as the origional list. For instance, if data was @(1, 3, 5, 3, 2) and
    $n is 1, the answer would result in a list @(1,5,2) because 3 occurs twice, and thus was removed
    from the list entirely.
#>
function Limit-ArrayItems {
    param(
        [int[]]
        $Data,

        [int]
        $Number
    )
    <#
        Fill in the function here to behave as described above,
        to submit the correct output to the
        tests below.
    #>

}

Context 'First Test: Arrays' {
    $DataInput = 2, -5, -3, 1, 6, 0, 1, 1, -2, 0, 9, 3, 4, 7, -2, 2, 1, -3, 6, 3, 6, 2, -1, 7, -5,
    -2, 9, 4, 4, 6, 9, 1, 8, 8, -1, 9, 0, 0, 7, 5, -2, 1, 2, -2, 1, -4, 8, 4, -2, 8, 0, 9, 0, 0, 1,
    -1, 8, -4, 4, 3, -1, -2, 6, 3, 7, -5, 8, 3, -4, -1, 8, 8, 2, 8, 5, 8, 8, 5, -3, -1, -3, 0, 5,
    -5, 2, -2, 0, 4, -3, 2, 9, 9, 0, -4, 3, 4, 5, 3, -4, -4, 7, 4, -2, -2, 3, 6, -3, 3, 6, -5, 5,
    -2, 1, 9, 0, 6, 7, 1, -5, 7, -2, 2, 0, 5, -2, 5, 8, 0, 3, 4, 2, 0, -5, 4, 6, -2, 6, -2, -2, 6,
    4, 8, 1, -1, -4, -1, 3, 6, 8, 2, 7, 9, 5, 5, 1, -5, 0, 2, 4, -1, 7, 8, 1, -3, 9, 2, -1, 5, 6,
    -3, 2, 2, 4, 2, 5, -4, -3, -1, -4, 2, 7, -1, 2, -4, 7, -4, -5, 0, 9, -2, -2, -1, 4, -2, -5, 2,
    7, 5, 0, 2, 3, -2, 8, 4, -5, 7, 1, 5, 6, -3, 0, 4, 5, -2, 9, -4, 6, 3, 9, 1, -2, -5, 3, -2, 8,
    7, 1, -2, -5, 1, -5, 2, -2, -2, 1, 5, 6, 4, 8, -4, -4, -1, 3, 4, 8, 6, 7, -2, 3, 7, 1, 4, 4, 4,
    -3, -4, 0, 8, 5, 0, 4, 1, 6, 2, 7, -2, -3, 9, -3, -5, 3, -3, -2, 0, -3, 7, 3, -4, -3, 1, 0, -4,
    -5, 3, -4, 9, 6, -3, -4, 0, -5, 0, -1, -1, 9, -5, 3, -2, -2, 3, -2, 7, 1, 2, 6, 4, -2, -5, 4,
    9, 0, 1, -2, -3, 1, 4, -3, 0, 2, 4, 6, 5, -4, 9, -4, 1, -2, 7, -4, 7, 2, 5, 0, -1, -5, -5, 4, 4,
    -4, 5, 4, -2, 5, 6, 4, 6, 6, 5, 5, 7, 3, 3, 0, 2, 4, 9, 0, 8, 7, 5, -4, -5, 4, 1, 9, 8, 0, 8,
    -4, 5, 9, -5, 3, 5, 4, 2, 1, -3, 9, -3, 5, 2, 7, -2, -1, -1, 2, -3, 4, 4, 2, 2, 3, -2, 4, 6, 0,
    2, 5, 5, 5, 0, 5, 7, -2, 4, -4, -1, -5, 8, 0, -4, 0, 1, 9, 8, 2, 4, 1, -2, -3, 8, 0, 9, -1, 1,
    -4, 4, 0, 4, 1, 9, 3, -1, 7, 0, 4, 7, 0, 1, 2, 4, 7, 8, -3, 5, 7, -5, 3, 2, 0, 3, 1, 1, 8, 2, 1,
    4, 0, 7, 8, 1, 8, 4, 4, 2, 0, 9, 8, 4, 3, 7, -2, 0, 6, -3, 2, 3, -5, 9, 2, -4, -3, 4, 6, 1, -2,
    7, 1, 6, 5, 7, 4, -5, 2, -2, 3, 8, -5, 4, -4, 5, 1, 0, -2, 6, 9, 4, -4, 2, -1, 8, 2, 7, -5, -1,
    3, 5, 1, 3, 4, -4, 8, -5, -3, 5, -3, -1, -4, -2, -5, -4, 7, 5, -2, 6, -1, 5, 3, 7, 6, 8, 7, 2,
    2, 6, 8, 9, 5, 2, 3, 8, 0, -3, -3, -2, 4, 4, 4, -4, 6, -1, 9, -4, -3, -4, 5, 5, 9, 8, -3, 1, 3,
    0, 7, -2, -2, 4, 8, -2, 3, 3, 0, 4, 4, -3, -5, 0, -4, 7, -3, -5, -2, 8, -4, 7, 4, 7, -3, 8, 0,
    6, -2, 1, 3, 5, 6, 8, -2, 6, 9, -1, 2, 5, 1, -5, 8, -4, 3, -2, 3, 5, 0, 5, 8, -5, 6, -2, -5, 3,
    3, 5, 2, -4, 1, 6, 1, 5, 5, -5, -5, 0, 8, 7, -4, 7, 8, 0, -5, 6, -2, -1, -5, 9, 2, -5, 7, -2,
    -3, 8, -5, -4, 8, -1, -1, 6, 4, 4, 8, -1, 7, 7, -4, 9, -5, -4, -4, 2, 9, 0, 6, -2, 7, -4, -1,
    -3, 3, 9, 3, 9, 8, 1, 4, -2, 1, 3, -4, 8, -3, 7, 4, 9, 0, 9, 1, 0, 7, 9, 7, 8, 9, -3, 2, 4, 7,
    -2, -5, 8, 5, 8, -5, 5, 1, -5, -3, 0, 1, 6, 7, 8, -4, 2, 4, 5, -5, 9, -4, -3, 2, -4, 0, 0, 9, 6,
    0, 6, 1, 4, 8, 2, -2, 9, -5, -2, -2, 0, -4, 2, 3, -4, 3, 0, 9, 2, -3, 9, 9, 9, 5, 6, -5, -1, 3,
    -4, 8, 9, 1, -5, -4, -2, 8, -3, 4, -4, -4, 4, 7, -2, 5, -4, 1, 0, 9, 1, 0, 4, -2, -3, 7, 2, -5,
    -3, 9, 2, 0, 5, -5, -5, 7, 4, 3, 9, 5, 6, -1, 5, -2, 2, -4, 4, 4, 4, 2, 4, -5, 1, 0, 9, -3, -2,
    9, 2, 2, 7, 2, -2, 3, 2, 0, 1, -3, -3, -1, -1, -4, -4, -5, 4, 2, 6, -3, 3, 5, 4, -2, 5, 6, 9, 6,
    6, 4, -1, 3, 4, 0, 9, -5, 0, -1, 7, 4, 3, 0, -4, -2, 6, 8, -4, 3, 0, 7, 9, -4, 5, -1, -5, 1, 0,
    -4, 9, 3, -5, 5, 9, -2, 0, -3, 8, -1, 4, 5, 7, -3, 6, 3, 0, -4, -4, 7, 9, 5, 2, 6, 8, 2, 5, 6,
    -3, 2, 7, -4, 5, -4, 3, -2, 8, -5, -1, -4, 5, 6, -4, 5, 7, 2, 5, 7, 8, 5, 3, 6, -3, 5, -1, -4,
    0, 4, -1, -1, 6, 5, -2, 2, 9, -1, -5, 9, 7, -3, 8, 7, 4, -4, 5, 8, 4, 5, 8, -2, 3, 0, 7, -1, 6,
    2, 8, 2, 0, 3, 6, -4, 2, 3, 2, 4, 8, -3, 8, -3, 7, 9, -5, 5, -4, -3, -3, -1, 0, 8, -1

    Describe 'Function' {

        $TestCases = 10, 25, 50, 100 | ForEach-Object {@{Number = $_}}
        It 'should handle a selection of <Number> numbers properly' -TestCases $TestCases {
            param($Number)

            $Data = $DataInput | Select-Object -Skip $Number -First $Number
            Limit-ArrayItems -Data $Data -Number 1
            Limit-ArrayItems -Data $Data -Number 2
            Limit-ArrayItems -Data $Data -Number 3
        }
    }
}
